﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace Modele
{
    [Serializable]
    public class Partition
    {
         [XmlAttribute("Tempo")]
        public int tempo=60;
         [XmlAttribute("Titre")]
        public string titre="Sans Titre";
         [XmlAttribute("Artiste")]
        public string artiste="Artiste Inconnu";
         [XmlAttribute("AuteurTab")]
         public string auteurTab = "Non défini";
         [XmlAttribute("Album")]
        public string album="Non défini";
         [XmlAttribute("Mp3")]
        public string mp3;
        [XmlElement(ElementName = "Piste")]
        public List<Piste> pistes = new List <Piste>();

     

        public Partition()
        {                      
            
        }

        public Partition(int tempo, string titre, string artiste)
        {
            this.tempo = tempo;
            this.titre = titre;
            this.artiste = artiste;
        }

        public Partition(int tempo, string titre, string artiste, string album)
        {
            this.tempo = tempo;
            this.titre = titre;
            this.artiste = artiste;
            this.album = album;
           
        }

        public Partition(int tempo, string titre, string artiste, string album, string auteurtb)
        {
            this.tempo = tempo;
            this.titre = titre;
            this.artiste = artiste;
            this.album = album;
            this.auteurTab = auteurtb;
        }

        public int CountMesure(int piste)
        {
            return pistes[piste].mesures.Count;
        }


        /*Permet de nettoyer une partition */
        public void Dispose()
        {
            for (int p = 0; p < pistes.Count;p++ )
            {

                for (int m = 0; m < pistes[p].mesures.Count;m++ )
                {


                    for (int n = 0; n < pistes[p].mesures[m].noteListe.Count;n++ )
                    {

                        /* on suprime les sous note ( accord) */

                        for (int n2 = 0; n2 < pistes[p].mesures[m].noteListe[n].noteAccord.Count;n2++ )
                        {
                            pistes[p].mesures[m].noteListe[n].noteAccord[n2] = null;
                        }
                        pistes[p].mesures[m].noteListe[n] = null;
                    }
                    
                    pistes[p].mesures[m].noteListe.Clear();
                    pistes[p].mesures[m]=null;
                }
                pistes[p].tablature.accordage.Clear();
                pistes[p].mesures.Clear();
                    pistes[p]=null;
            }
            pistes.Clear();

        }

    }
}
